﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.Entitys
{
    /// <summary>
    /// 职位调动表
    /// </summary>
    public class MC
    {
        /// <summary>
        /// 唯一标识符，作为主键且为自动增长列，用于在系统中唯一确定该员工岗位调动及薪酬变更记录，类型为整数。
        /// </summary>
        [Key]
        public int MchId { get; set; }

        /// <summary>
        /// 一级机构编号，用于明确员工原来所在的一级机构，方便在组织架构层面进行关联以及业务操作，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? FirstKindId { get; set; }

        /// <summary>
        /// 一级机构名称，直观展示员工原来所属的一级机构具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string? FirstKindName { get; set; }

        /// <summary>
        /// 二级机构编号，进一步细化员工原来所在的机构层级，使其能准确关联到对应的二级机构，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? SecondKindId { get; set; }

        /// <summary>
        /// 二级机构名称，便于清晰呈现员工原来所属二级机构的具体称谓，有助于区分不同二级机构下的员工，类型为字符串。
        /// </summary>
        public string? SecondKindName { get; set; }

        /// <summary>
        /// 三级机构编号，精准定位员工原来所在的三级机构，便于系统内更细致的机构相关操作以及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? ThirdKindId { get; set; }

        /// <summary>
        /// 三级机构名称，明确展示员工原来所在三级机构的具体名称，类型为字符串。
        /// </summary>
        public string? ThirdKindName { get; set; }

        /// <summary>
        /// 职位分类编号，用于区分员工原来的职位分类，便于在系统内进行职位相关的识别、关联以及业务操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? MajorKindId { get; set; }

        /// <summary>
        /// 职位分类名称，直观展示员工原来职位分类的具体称呼，方便用户识别和理解，类型为字符串。
        /// </summary>
        public string? MajorKindName { get; set; }

        /// <summary>
        /// 职位编号，用于唯一标识员工原来的职位，方便进行职位相关的各类操作及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? MajorId { get; set; }

        /// <summary>
        /// 职位名称，清晰呈现员工原来职位的具体称谓，有助于区分不同职位，类型为字符串。
        /// </summary>
        public string? MajorName { get; set; }

        /// <summary>
        /// 新一级机构编号，用于明确员工调动后所在的一级机构，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? NewFirstKindId { get; set; }

        /// <summary>
        /// 新一级机构名称，直观展示员工调动后所属的一级机构具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string? NewFirstKindName { get; set; }

        /// <summary>
        /// 新二级机构编号，进一步细化员工调动后所在的机构层级，使其能准确关联到对应的二级机构，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? NewSecondKindId { get; set; }

        /// <summary>
        /// 新二级机构名称，便于清晰呈现员工调动后所属二级机构的具体称谓，有助于区分不同二级机构下的员工，类型为字符串。
        /// </summary>
        public string? NewSecondKindName { get; set; }

        /// <summary>
        /// 新三级机构编号，精准定位员工调动后所在的三级机构，便于系统内更细致的机构相关操作以及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? NewThirdKindId { get; set; }

        /// <summary>
        /// 新三级机构名称，明确展示员工调动后所在三级机构的具体名称，类型为字符串。
        /// </summary>
        public string? NewThirdkindName { get; set; }

        /// <summary>
        /// 新职位分类编号，用于区分员工调动后新的职位分类，便于在系统内进行职位相关的识别、关联以及业务操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? NewMajorKindId { get; set; }

        /// <summary>
        /// 新职位分类名称，直观展示员工调动后新职位分类的具体称呼，方便用户识别和理解，类型为字符串。
        /// </summary>
        public string? NewMajorKindName { get; set; }

        /// <summary>
        /// 新职位编号，用于唯一标识员工调动后新的职位，方便进行职位相关的各类操作及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? NewMajorId { get; set; }

        /// <summary>
        /// 新职位名称，清晰呈现员工调动后新职位的具体称谓，有助于区分不同职位，类型为字符串。
        /// </summary>
        public string? NewMajorName { get; set; }

        /// <summary>
        /// 人力资源档案编号，用于关联到对应的员工档案，确定是哪位员工发生了岗位调动及薪酬变更，类型为字符串（可根据档案编号格式确定具体类型）。
        /// </summary>
        public string? HumanId { get; set; }

        /// <summary>
        /// 姓名，记录发生岗位调动及薪酬变更的员工姓名，类型为字符串。
        /// </summary>
        public string? HumanName { get; set; }

        /// <summary>
        /// 薪酬标准编号，用于关联员工原来的薪酬标准，便于薪酬核算等相关操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? SalaryStandardId { get; set; }

        /// <summary>
        /// 薪酬标准名称，直观展示员工原来薪酬标准的具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string? SalaryStandardName { get; set; }

        /// <summary>
        /// 薪酬总额，记录员工原来的薪酬总额，类型为 decimal（用于精确的金额计算）。
        /// </summary>
        public decimal? SalarySum { get; set; }

        /// <summary>
        /// 新薪酬标准编号，用于关联员工调动后新的薪酬标准，便于薪酬核算等相关操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string? NewSalaryStandardId { get; set; }

        /// <summary>
        /// 新薪酬标准名称，直观展示员工调动后新薪酬标准的具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string? NewSalaryStandardName { get; set; }

        /// <summary>
        /// 新薪酬总额，记录员工调动后新的薪酬总额，类型为 decimal（用于精确的金额计算）。
        /// </summary>
        public decimal? NewSalarySum { get; set; }

        /// <summary>
        /// 调动原因，用于记录员工岗位调动的具体原因，如业务发展需要、个人申请等，类型为字符串。
        /// </summary>
        public string? ChangeReason { get; set; }

        /// <summary>
        /// 审核通过意见，记录在岗位调动及薪酬变更审核过程中通过的具体意见和建议，类型为字符串。
        /// </summary>
        public string? CheckReason { get; set; }

        /// <summary>
        /// 复核通过状态，用于标记该岗位调动及薪酬变更信息当前是否经过复核以及复核的结果情况等，类型为布尔值（true表示复核通过，false表示未通过复核）。
        /// </summary>
        public string? CheckStatus { get; set; }

        /// <summary>
        /// 登记人，记录最初将该岗位调动及薪酬变更信息录入系统的人员相关信息，类型为字符串。
        /// </summary>
        public string? Register { get; set; }

        /// <summary>
        /// 复核人，明确负责对该岗位调动及薪酬变更信息进行复核操作的人员相关信息，类型为字符串。
        /// </summary>
        public string? Checker { get; set; }

        /// <summary>
        /// 登记时间，记录岗位调动及薪酬变更信息在系统中首次登记的时间，类型为DateTime。
        /// </summary>
        public DateTime? RegistTime { get; set; }

        /// <summary>
        /// 复核时间，对应岗位调动及薪酬变更信息复核操作完成的时间点，类型为DateTime。
        /// </summary>
        public DateTime? CheckTime { get; set; }
    }
}
